<?php

/**
 * usuarios actions.
 *
 * @package    nogoya
 * @subpackage usuarios
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 2288 2006-10-02 15:22:13Z fabien $
 */
class usuariosActions extends autousuariosActions
{

  protected function updateUsuarioFromRequest(){
    $this->usuario->setActivo($this->getRequestParameter("activo"));
    parent::updateUsuarioFromRequest();
  }
  public function executeLogin(){
    if ($this->getRequest()->getMethodName() == "POST") {
      $username = $this->getRequestParameter("username");
      $password = md5($this->getRequestParameter("password"));
      $usuario = UsuarioPeer::getLogin($username,$password);
      if ( ! $usuario) {
        $this->setFlash("login-error",true);
      } else {
        $this->getUser()->setAuthenticated(true);
        $this->getUser()->setUserId($usuario->getId());
        $this->getUser()->setRolId($usuario->getRolId());
        $this->getUser()->setUsuario($usuario);
        $credenciales = RolCredencialPeer::getByRolId($usuario->getRolId());
        if ($credenciales) {
          foreach ($credenciales as $cred) {
            $this->getUser()->addCredential($cred->getCredencial()->getCodigo());
          }
        }
        // cargamos en session los datos de estados
        $estados = TurnoEstadoPeer::doSelect(new Criteria());
        $aEstado = array();
        foreach ($estados as $estado) {
          $aEstado[$estado->getCodigo()] = $estado;
        }
        $this->getUser()->setAttribute("estados",$aEstado);
        $this->redirect("home");
      }
    }
  }
  public function executeLogout(){
    $this->getUser()->setAuthenticated(false);
    $this->redirect("@login");
  }
  public function executeDatos(){
  }
  public function executeAusencia(){
    $this->medico = $this->getUser()->getUsuario();
    $this->cambio = HorarioCambioPeer::retrieveByPk($this->getRequestParameter("id"));
    if (! $this->cambio) {
      $this->cambio = new HorarioCambio();
    }
  }
  public function executeGuardarCambioHorario(){

    $inicio = FechasDias::formatoToDefault($this->getRequestParameter("fecha_inicio"));
    $fin = FechasDias::formatoToDefault($this->getRequestParameter("fecha_fin"));
    $medico_id = $this->getRequestParameter("usuario_id");
    if ($fin < $inicio) {
      $this->setFlash("mensaje",sfConfig::get("app_error_fecha_fin"));
      $this->redirect("layout/loadComponent?call_modules=usuarios&call_action=cambioHorario&params=medico_id.$medico_id");
    }
    //$turnos = TurnoPeer::countActivosByRangoMedico($medico_id,$inicio,$fin);

  }
  public function executeGuardarHorario(){
    $dias = $this->getRequestParameter("dia");
    $usuario_id = $this->getRequestParameter("usuario_id");
    foreach ($dias as $id => $dia) {
      $oDia = HorarioPeer::getByDiaIdUsuarioId($id,$usuario_id);
      if (! $oDia) {
        $oDia = new Horario();
        $oDia->setUsuarioId($usuario_id);
        $oDia->setDiaId($id);
      }
      if ( ($dia["i"] == "" || $dia["f"] == "") || ($dia["f"] < $dia["i"]) ) {
        $oDia->setActivo(0);
      } else {
        $oDia->setActivo(1);
      }
      $oDia->setInicio($dia["i"]);
      $oDia->setFin($dia["f"]);
      $oDia->save();
    }
    $this->redirect("layout/loadComponent?call_module=usuarios&call_action=horario");
  }
  public function executeComboProfesionales(){
    $this->medico_id = $this->getRequestParameter("medico_id");
    $this->estudio_id = $this->getRequestParameter("estudio_id");
    if (is_numeric($this->estudio_id)) {
      $medicos = UsuarioPeer::getMedicosByEstudioId($this->estudio_id);
    } else {
      $medicos = UsuarioPeer::getByCredencial("realiza_estudios");
    }
    $this->medicos = Objetos::_toArray($medicos);
  }
  public function executeComboProfesionalesHorario(){
    $dia = $this->getRequestParameter("fecha");
    $adia = explode("-",$dia);
    $dia_id = DiaPeer::getOneByOrden(FechasDias::getDiaSemana($adia[0],$adia[1],$adia[2]));
    $hora = $this->getRequestParameter("hora");
    $estudio_id = $this->getRequestParameter("estudio_id");
    $sql = UsuarioPeer::getSqlByFechaHoraEstudio($dia,$hora,$dia_id->getId(),$estudio_id);
    $con = Propel::getConnection();
    $stmt = $con->prepareStatement($sql);
    $rs = $stmt->executeQuery();
    $medicos = array();
    while ($rs->next()){
      $id = $rs->getInt("id");
      $medicos[$id] = UsuarioPeer::retrieveByPK($id);
    }
    $this->medicos = $medicos;
    $this->medico_id = $this->getRequestParameter("medico_id");
  }
}
